#include <sys/types.h>
#include <sys/ipc.h>
#include <iostream>
#include <unistd.h>
#include <string>
#include <sys/stat.h>
#include <cstring>
#include <signal.h>
#include <sys/msg.h>
using namespace std;

void printpending(sigset_t& pending)
{
    printf("我是一个进程,pid: %d\n",getpid());
    cout<<"pending: ";
    for(int signo=31;signo>=1;signo--)
    {
        if(sigismember(&pending,signo)) cout<<1<<' ';
        else cout<<0<<' ';
    }
    cout<<endl;
}
void handler(int sig)
{
    cout<<"###############################"<<endl;
    cout<<"收到"<<sig<<"信号"<<endl;
    sigset_t pending;
    int m=sigpending(&pending);
    printpending(pending);
    cout<<"###############################"<<endl;
}

int main()
{
    sigset_t pending;
    signal(SIGINT,handler);
    //屏蔽二号信号
    sigset_t block;
    sigemptyset(&block);
    sigset_t o_block;
    sigemptyset(&o_block);
    sigaddset(&block,2);
    //int n=sigprocmask(SIG_SETMASK,&block,nullptr);
    int i=0;
    while(1)
    {
        int n=sigprocmask(SIG_SETMASK,&block,nullptr);
        (void) n;
        //获取pending信号集

        int m=sigpending(&pending);

        //打印
        printpending(pending); 
        if(i%6==5)
        {
            sigprocmask(SIG_SETMASK,&o_block,nullptr);
            cout<<"取消对二号信号的屏蔽了"<<endl;
        }
        sleep(1);
        i++;
    }

    return 0;
}